基于Jackson封装的JSON、Properties、XML、YAML 相互转换的通用方法

您所在的位置:网站首页 清平乐 六盘山诗配画 基于Jackson封装的JSON、Properties、XML、YAML 相互转换的通用方法

基于Jackson封装的JSON、Properties、XML、YAML 相互转换的通用方法

2024-03-09 01:35| 来源: 网络整理| 查看: 265

文章目录 一、概述二、思路三、实现四、测试

一、概述

我们在 yaml转换成JSON、MAP、Properties 通过引入 在这里插入图片描述 实现了JSON、Properties、XML、YAML文件的相互转换,具体的类、方法如下: 在这里插入图片描述 上面的实现,定义了多个类、多个方法,使用太不方便,迫切需要精简逻辑。

二、思路

观察上面的代码实现,发现jackson对不同对象的封装主要是通过ObjectMapper的子类来进行的 在这里插入图片描述 以JsonUtils为例,观察方法的实现

/** * JsonUtils 转换工具 * * @author 00fly * */ public class JsonUtils extends BaseJackson { /** * json转properties字符串 * * @param jsonText * @return * @throws IOException */ public static String jsonToPropText(String jsonText) throws IOException { JsonNode jsonNode = jsonMapper.readTree(jsonText); return javaPropsMapper.writeValueAsString(jsonNode); } /** * Json转xml字符串 * * @param jsonText * @return * @throws IOException */ public static String jsonToXml(String jsonText) throws IOException { JsonNode jsonNode = jsonMapper.readTree(jsonText); return xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode); } /** * json转yaml * * @param jsonText * @return * @throws IOException */ public static String jsonToYaml(String jsonText) throws IOException { JsonNode jsonNode = jsonMapper.readTree(jsonText); return yamlMapper.writeValueAsString(jsonNode); } }

我们发现,转换方法分为2步,首先将源格式数据转换为JsonNode,其次再将JsonNode转换为需要的格式。

转换流程示意图如下:

JSON JsonNode Properties对象 Properties字符串 XML YAML JSON Properties对象 Properties字符串 XML YAML 三、实现

对照上面的分析,我们封装的方法如下: 5个xxxToJsonNode 实现了原始数据到JsonNode的转换, 5个jsonNodeToxxx实现了JsonNode到结果数据的转换 在这里插入图片描述

核心代码:

import java.io.IOException; import java.util.Properties; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; /** * JsonNodeUtils 转换工具 * * @author 00fly * */ public class JsonNodeUtils { private static JavaPropsMapper javaPropsMapper = new JavaPropsMapper(); private static JsonMapper jsonMapper = new JsonMapper(); private static XmlMapper xmlMapper = new XmlMapper(); private static YAMLMapper yamlMapper = new YAMLMapper(); // JsonNode对象转换为JSON、PROPERTIES、XML、YAML /** * jsonNode转json字符串 * * @param jsonNode * @return */ public static String jsonNodeToJson(JsonNode jsonNode) { return jsonNode.toPrettyString(); } /** * jsonNode转properties字符串 * * @param jsonNode * @return * @throws IOException */ public static String jsonNodeToPropsText(JsonNode jsonNode) throws IOException { return javaPropsMapper.writeValueAsString(jsonNode); } /** * jsonNode转properties对象 * * @param jsonNode * @return * @throws IOException */ public static Properties jsonNodeToProperties(JsonNode jsonNode) throws IOException { return javaPropsMapper.writeValueAsProperties(jsonNode); } /** * jsonNode转xml字符串 * * @param jsonNode * @return * @throws IOException */ public static String jsonNodeToXml(JsonNode jsonNode) throws IOException { return xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode); } /** * jsonNode转yaml * * @param jsonNode * @return * @throws IOException */ public static String jsonNodeToYaml(JsonNode jsonNode) throws IOException { return yamlMapper.writeValueAsString(jsonNode); } // JSON、PROPERTIES、XML、YAML转换为JsonNode对象 /** * json转JsonNode * * @param jsonText * @return * @throws IOException */ public static JsonNode jsonToJsonNode(String jsonText) throws IOException { return jsonMapper.readTree(jsonText); } /** * properties对象转JsonNode * * @param properties * @return * @throws IOException */ public static JsonNode propsToJsonNode(Properties properties) throws IOException { return javaPropsMapper.readPropertiesAs(properties, JsonNode.class); } /** * properties字符串转JsonNode * * @param propText * @return * @throws IOException */ public static JsonNode propsToJsonNode(String propText) throws IOException { return javaPropsMapper.readTree(propText); } /** * xml转JsonNode * * @param xmlContent * @return * @throws IOException */ public static JsonNode xmlToJsonNode(String xmlContent) throws IOException { return xmlMapper.readTree(xmlContent); } /** * yaml转JsonNode * * @param yamlContent * @return * @throws IOException */ public static JsonNode yamlToJsonNode(String yamlContent) throws IOException { return yamlMapper.readTree(yamlContent); } } 四、测试

下面的测试以json转换为propText、xml、yaml为例来说明,其他情况照猫画虎、以此类推, 能读代码的都是聪明人,哈哈!

import java.io.IOException; import java.nio.charset.StandardCharsets; import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import com.fly.core.utils.jackson.JsonNodeUtils; import lombok.extern.slf4j.Slf4j; /** * JsonNodeUtils测试 */ @Slf4j public class JsonNodeUtilsTest { static String jsonText; @BeforeAll public static void init() { try { Resource resource = new ClassPathResource("data.json"); jsonText = IOUtils.toString(resource.getInputStream(), StandardCharsets.UTF_8); } catch (IOException e) { log.error(e.getMessage(), e); } } @Test public void jsonToPropText() throws IOException { String propText = JsonNodeUtils.jsonNodeToPropsText(JsonNodeUtils.jsonToJsonNode(jsonText)); log.info("jsonToPropText: {}", propText); } @Test public void jsonToXml() throws IOException { String xml = JsonNodeUtils.jsonNodeToXml(JsonNodeUtils.jsonToJsonNode(jsonText)); log.info("jsonToXML: {}", xml); } @Test public void jsonToYaml() throws IOException { String yaml = JsonNodeUtils.jsonNodeToYaml(JsonNodeUtils.jsonToJsonNode(jsonText)); log.info("jsonToYaml: {}", yaml); } }

测试结果,就不放出来了。

大家可以根据需要选择方案,有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3